﻿#pragma once
#include "json_data.h"


#define cfgrw (CfgJsonRW::GetInstance())

class CfgJsonRW
{

public:
	CfgJsonRW();
	~CfgJsonRW();

	static CfgJsonRW* GetInstance();

	bool Init();
	bool SaveCfg();

	QString GetProjectName();
	bool SetProjectName(const QString& name);

	WCSCfgJ GetWCSCfg();
	bool UpdateWCSCfg(const WCSCfgJ& cfg);

	RobotJ GetRobotCfg();
	bool UpdateRobotCfg(const RobotJ& cfg);

	JigCfg GetJigCfg();
	bool SetJigCfg(const JigCfg& cfg);

	VisualJ GetCameraCfg();
	bool UpdateCameraCfg(const VisualJ& cfg);

	QStringList GetAllStackPlateID();
	StackPlateCfg GetStackPlateCfgByID(const QString& id);
	bool DeleteStackPlate(const QString& id);
	bool UpdateStackPlateCfg(const StackPlateCfg& cfg);
	bool SetAllStackPlateCfg(const QList<StackPlateCfg>& cfg);

	PlateStackCfg GetPlateStackCfg();
	bool UpdatePlateStackCfg(const PlateStackCfg& cfg);

	QStringList GetAllUnstackPlateID();
	UnstackPlateCfg GetUnstackPlateCfgByID(const QString& id);
	bool DeleteUnstackPlate(const QString& id);
	bool UpdateUnstackPlateCfg(const UnstackPlateCfg& cfg);
	bool SetAllUnstackPlateCfg(const QList<UnstackPlateCfg>& cfg);

	QStringList GetAllBoxlineID();
	BoxlineCfg GetBoxlineCfgByID(const QString& id);
	bool DeleteBoxline(const QString& id);
	bool UpdateBoxlineCfg(const BoxlineCfg& cfg);
	bool SetAllBoxlineCfg(const QList<BoxlineCfg>& cfg);

	QStringList GetAllPipelineID();
	PipelineCfg GetPipelineCfgByID(const QString& id);
	bool DeletePipeline(const QString& id);
	bool UpdatePipelineCfg(const PipelineCfg& cfg);
	bool SetAllPipelineCfg(const QList<PipelineCfg>& cfg);

	QStringList GetAllPipelinePathID(const QString& pipe);
	PathCfg GetPipelinePathCfgByID(const QString& pipe, const QString& id);
	bool DeletePipelinePath(const QString& pipe, const QString& id);
	bool UpdatePipelinePathCfg(const QString& pipe, const PathCfg& cfg);

	QStringList GetPathIDList();
	PathCfg GetPathCfgById(const QString& id);
	bool SaveAllPath(const QList<PathCfg>& cfgs);

	QList<GratingJ> GetGratingCfg();
	bool SaveGratingCfg(const QList<GratingJ>& cfg);

	AlarmJ GetAlarmLightCfg();
	bool SaveAlarmLightCfg(const AlarmJ& cfg);

	/*安全锁配置*/
	SafeLockJ GetSafeLockerCfg();
	bool SaveSafeLockerCfg(const SafeLockJ& cfg);

	/*安全门配置*/
	SafeDoorJ GetSafeDoorCfg();
	bool SaveSafeDoorCfg(const SafeDoorJ& cfg);

private:
	SystemSetting m_all = {};
};
